package server;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

import org.junit.platform.commons.annotation.Testable;
import org.omg.CORBA.PUBLIC_MEMBER;

//Thread类，线程的基类
//实现多线程的方式有几种：
/**
 1. 继承Thread类，重写run方法
 2. 实现Runnable接口，重写run方法，new thread(target)
 3. Callalble+FutureTast
 * */


class MyThread extends Thread { // 定义线程是什么
	// Thread类，线程的基类
	public static void main(String[] args) {
		MyThread my1 = new MyThread();
		// my1.run(); 线程同步
		// 启动执行该子线程，执行线程run方法，立刻返回start方法my1.start();
		// 两条路上同时输出，看CPU安排
		// cpu执行多线程程序时，随机执行
		my1.start(); // 线程异步
		for (int i = 0; i < 100; i++)
			System.out.println("main--" + i);
		// 一旦线程启动后start方法就会立即返回
		// 不会等到run方法执行完毕才返回

	}

	public void test() { // 匿名内部类
		// 一般写法：
//		Thread td1 = new Thread() {
//			public void run() {
//				System.out.println(12123);
//			}
//		};
//		td1.start();
		// 匿名内部类写法：
		new Thread() {
			public void run() {
				System.out.println(12123);
			}
		}.start();
		// 匿名内部类泛型写法
		List<String> list = new ArrayList<String>() {
			@Override
			public boolean add(String e) {
				System.out.println("---" + e);
				return super.add(e);
			}
		};

	}

	// 创建子类?实现接口?
	//更倾向于Runnable接口
	public void test2() {
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("123");
			}
		});
	}
	@Override
	public void run() {

		System.out.println("123"); // 定义线程所要做的事情
		for (int i = 0; i < 100; i++) {
			System.out.println("My thread.run--" + i);
		}
	}

	public void test3() {
		MyThread my1 = new MyThread();
		my1.setName("MyThread");
//		Thread thread = new Thread(new MyRunnable());
		String nameString = my1.getName();
		
		Thread t1 = Thread.currentThread();
	}
}
//===================================================================================
//Callable多线程
public class Threadtest {

}




































